/*
 * 版权所有 2024 - 2024 原始作者或作者。
 *
 * 你可以在符合许可证的情况下使用此文件。
 * 你可以通过以下链接获取许可证的副本：
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * 除非适用法律要求或书面同意，否则根据许可证分发的软件
 * 不附带任何明示或暗示的担保或条件。
 * 请参阅许可证以获取特定语言的权限和限制。
 */
package com.example.demomcp;

import java.util.Map;

import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.spec.McpClientTransport;
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
import io.modelcontextprotocol.spec.McpSchema.ListToolsResult;

/**
 * @author Christian Tzolov
 */

public class SampleClient {

	private final McpClientTransport transport;

	public SampleClient(McpClientTransport transport) {
		this.transport = transport;
	}

	public void run() {

		var client = McpClient.sync(this.transport).build();

		client.initialize();

		client.ping();

		// 列出并演示工具
		ListToolsResult toolsList = client.listTools();
		System.out.println("可用工具 = " + toolsList);
		toolsList.tools().stream().forEach(tool -> {
			System.out.println("工具: " + tool.name() + ", 描述: " + tool.description() + ", 架构: " + tool.inputSchema());
		});

		CallToolResult weatherForcastResult = client.callTool(new CallToolRequest(
				"getWeather",
				Map.of("cityName", "47.6062")));
		System.out.println("天气预报: " + weatherForcastResult);

//		CallToolResult alertResult = client.callTool(new CallToolRequest(
//				"getAlerts", Map.of("state", "NY")));
//		System.out.println("警报响应 = " + alertResult);

		client.closeGracefully();

	}

}